//
//  MessageTableViewController.swift
//  Weibo
//
//  Created by 潇 on 15/12/13.
//  Copyright © 2015年 潇. All rights reserved.
//

import UIKit
//在不同的项目中  需要导入命名空间
import AFNetworking
import SVProgressHUD

private let HomeCellId = "HomeCellId"

class HomeTableViewController: BaseTableViewController {

    private lazy var statuses = [Status]()
    
    //添加自定义下拉刷新
    private lazy var refreshView: WBRefreshControl = WBRefreshControl()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        if !userLogin {
            //没有登录的情况下 显示访客视图
            visitorLoginView?.setupInfo("登录后，别人评论你的微博，发给你的消息，都会在这里收到通知", imageName: nil)
            return
        }
        //设置tableView
        prepareTableView()
        
        loadData()
    }
    
    private func prepareTableView() {
        //1.注册cell
        tableView.registerClass(StatusCell.self, forCellReuseIdentifier: HomeCellId)
        
        //修改tableView 的固定高度
        //希望 tableVIew 能够自动计算行高,需要设置两个关键的属性
        //rableView能够自动计算行高,需要给 contentView 添加约束
        //1.设置预估行高
        tableView.estimatedRowHeight = 300
        //设置自动计算行高
        tableView.rowHeight = UITableViewAutomaticDimension
        
        //设置分割线的样式
        tableView.separatorStyle = .None
        
        //设置系统的下拉刷新
//        refreshControl = UIRefreshControl()
        //绑定事件
//        refreshControl?.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
        
        //添加自定义下拉刷新控件
        tableView.addSubview(refreshView)
        refreshView.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
        
        //设置 tableView 的 tableFooterView
        tableView.tableFooterView = indicatorView
    }
    
    
    
    @objc private func loadData() {
        
        //使用 viewmodel 获取网咯数据
        var max_id: Int = 0
        var since_id: Int = 0
        //判断小菊花是否正在转动 判断是否是上拉加载
        if indicatorView.isAnimating() {
            //上次加载数据
            max_id = statuses.last?.id ?? 0
        } else {
            since_id = statuses.first?.id ?? 0
        }
        
        
        StatusListViewModel.loadHomePageData(since_id, max_id: max_id) { (statuses) -> () in
            //网络加载结束的时候关闭动画
            self.refreshView.endRefreshing()
            
            guard let list = statuses else{
                return
            }
            
            //测试打印
            print("----------")
            print(list.count)
            if since_id > 0 {
                //下拉刷新新数据的操作 执行添加的操作
                self.statuses = list + self.statuses
//                if self.tableView.dragging {
//                    return
//                }
                
            } else if max_id > 0 {
                //上啦加载更多数据
                self.statuses += list
                //数据加载完毕之后 结束动画
                self.indicatorView.stopAnimating()
            }else {
                //首次加载 直接赋值
                self.statuses = list
            }
            //执行刷新
            self.tableView.reloadData()
        }
        
        //实现网络请求
//        let AFN = AFHTTPSessionManager()
        //get请求
//        let urlString = "https://api.weibo.com/2/statuses/home_timeline.json"
        //failed: unacceptable content-type: text/html 表示反序列化错误
//        AFN.responseSerializer.acceptableContentTypes?.insert("text/html")
        
//        //显示指示器
//        SVProgressHUD.show()
        
        //发送请求
        //判断 token 是否为空
//        guard let token = UserAccountViewModel().token else {
//            print("token为空")
//            SVProgressHUD.showInfoWithStatus("请重新登录")
//            return
//        }
//        let parameters = ["access_token" : token]
//        NetworkTools.sharedTools.requestJSONDict(.GET, urlString: urlString, parameters: parameters) { (dict, error) -> () in
//            if error != nil {
//                //请求失败
//                SVProgressHUD.showInfoWithStatus("你的网络出问题,请稍后再试")
//                return
//            }
//                //请求成功
//            if let array = dict!["statuses"] as? [[String : AnyObject]] {
//                //                    print(array)
//                //TODO:便利数组中所有字典,进行字典转模型
//                var list = [Status]()//实例化
//                for item in array {
//                    //                        print(item["text"])
//                    let s = Status(dict: item)
//                    list.append(s)
//                }
//                self.statuses = list
//                //改变数据源
//                self.tableView.reloadData()
//            }
//        }
//        
//        AFN.GET(urlString, parameters: parameters, progress: { (p) -> Void in
//                print(p)
//            }, success: { (task, result) -> Void in
//                //在 success 回调中,做数据解析
//                //需要判断 result 能否转化为字典
//                guard let dict = result as? [String : AnyObject] else {
//                    print("数据不合法")
//                    SVProgressHUD.showInfoWithStatus("你的网络出问题,请稍后再试")
//                    return
//                }
//                //算数据获取成功
//                //通过键值方式获取 statuses 对应的数组
//                if let array = dict["statuses"] as? [[String : AnyObject]] {
//                    print(array)
//                    //TODO:便利数组中所有字典,进行字典转模型
//                    var list = [Status]()//实例化
//                    for item in array {
//                        print(item["text"])
//                        let s = Status(dict: item)
//                        list.append(s)
//                    }
//                    self.statuses = list
//                    //改变数据源
//                    self.tableView.reloadData()
//                }
//            }) { (task, error) -> Void in
//                print(error)
//        }
        
    }
    
    //下拉加载数据
    private lazy var indicatorView: UIActivityIndicatorView = {
        let i = UIActivityIndicatorView(activityIndicatorStyle: .Gray)
        //开始动画
//        i.startAnimating()
        return i
    }()
  
}

//MARK: tableView 的数据源方法
extension HomeTableViewController {
    
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statuses.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        //iOS 6.0退出的  一定可以获得一个 cell 对象
        let cell = tableView.dequeueReusableCellWithIdentifier(HomeCellId, forIndexPath: indexPath) as! StatusCell
//        cell.textLabel?.text = statuses[indexPath.row].user?.name
        cell.status = statuses[indexPath.row]
        print(statuses[indexPath.row].retweeted_status?.text)
        if !indicatorView.isAnimating() && indexPath.row == statuses.count - 1 {
            //滑到最后一行,小菊花没有转动的情况下,自动加载数据
            //在加载数据之前  转动小菊花
            indicatorView.startAnimating()
            loadData()
        }
        return cell
    }}
